/*
** Various OPN-based chips
**
*/

#include "smse2kincludes.h"

// YM2203 - found on all sorts of arcade games and Japanese home computers,
// probably the most popular of the entire series in terms of support
class YM2203 : public SMSE2KSndDevice {
	private:
		void* ssg;
		void* ssgCallbacks;
		char channelMask[6]; // 3 psg, 3 fm

	private:
		unsigned char irq_target_cpu;
		unsigned char irq_target_setup;

	private: // PSG write callbacks
		void writePsg(void*,unsigned char,unsigned char);

};

// YM2610 - found in Neo Geo and late 1980's Taito games (eg Darius II, Superman et al).
class YM2610 : public SMSE2KSndDevice {
	private:
		char channelMask[16];

	private:
		void muteFm1(int status);
		void muteFm2(int status);
		void muteFm3(int status);
		void muteFm4(int status);
		void mutePsg1(int status);
		void mutePsg2(int status);
		void mutePsg3(int status);
		void mutePcm1(int status);
		void mutePcm2(int status);
		void mutePcm3(int status);
		void mutePcm4(int status);
		void mutePcm5(int status);
		void mutePcm6(int status);
		void mutePcm7(int status);

};

// YM2608 - found on PC8801 mkIIFR computers
class YM2608 : public SMSE2KSndDevice {
	private:
		void muteFm1(int status);
		void muteFm2(int status);
		void muteFm3(int status);
		void muteFm4(int status);
		void muteFm5(int status);
		void muteFm6(int status);
		void mutePsg1(int status);
		void mutePsg2(int status);
		void mutePsg3(int status);

};

// YM2612 - found in Megadrives, similar to YM2608
class YM2612 : public SMSE2KSndDevice {
	private:
		void muteFm1(int status);
		void muteFm2(int status);
		void muteFm3(int status);
		void muteFm4(int status);
		void muteFm5(int status);
		void muteFm6(int status);
		void mutePcm(int status);
}